package com.example.myapplication;

import androidx.core.content.ContextCompat;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Objects;

/**
 * 登录成功后的页面
 */
public class MainActivity2PageView extends Activity implements View.OnClickListener {

    // 底部菜单 Linearlayout
    private LinearLayout contacts, person;

    // 底部菜单图标 ImageView
    private ImageView contactsImage, personImage;

    // 底部菜单标题文本 TextView
    private TextView contactsText, personText;

    private Intent intent;

    // 首页Fragment、个人Fragment
    private Fragment homeFragment, personalFragment;

    //  两次点击间隔时间  是否退出程序
    private long exitTime;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2_main_page_view);
        initView();// 初始化控件
        initEvent();// 设置按钮监听

        // 初始化并设置当前Fragment
        contactsImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.cornflowerblue)));
        contactsText.setTextColor(ContextCompat.getColor(this, R.color.cornflowerblue));
        // 默认初始化加载首页Fragment，0表示homeFragment
        initFragment(0);

        // 添加
        findViewById(R.id.create_person).setOnClickListener(view -> {
            intent = new Intent(this, MainActivity2Edit.class);
            // 添加标识
            intent.putExtra("home", "insert");
            startActivityIfNeeded(intent, 1);
        });
    }

    private void initView() {
        // 底部菜单Linearlayout
        contacts = findViewById(R.id.bottom_person);    // 联系人LinearLayout
        person = findViewById(R.id.bottom_personal);  // 个人LinearLayout
        // 底部菜单ImageView
        contactsImage = findViewById(R.id.bottom_person_icon);   // 联系人ImageView
        personImage = findViewById(R.id.bottom_personal_icon); // 个人ImageView
        // 底部菜单标题TextView
        contactsText = findViewById(R.id.bottom_person_text);   // 联系人TextView
        personText = findViewById(R.id.bottom_personal_text); // 个人TextView
    }

    private void initEvent() {
        contacts.setOnClickListener(this);   // 联系人监听事件
        person.setOnClickListener(this);    // 个人监听事件
    }

    // 用于处理底部导航栏的点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            // 如果点击的是联系人按钮，将该按钮的图标和文字颜色设置为天蓝色，并显示homeFragment。
            case R.id.bottom_person:
                // 调用restartBotton方法，将所有底部菜单项的颜色重置为紫色
                restartBotton();
                contactsImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.cornflowerblue)));
                contactsText.setTextColor(ContextCompat.getColor(this, R.color.cornflowerblue));
                initFragment(0);
                break;
            // 如果点击的是个人按钮，将该按钮的图标和文字颜色设置为天蓝色，并显示personalFragment。
            case R.id.bottom_personal:
                restartBotton();
                personImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.cornflowerblue)));
                personText.setTextColor(ContextCompat.getColor(this, R.color.cornflowerblue));
                initFragment(1);
                break;
            default:
                break;
        }
    }

    // 重置链接样式
    private void restartBotton() {
        contactsImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.purple)));
        contactsText.setTextColor(ContextCompat.getColor(this, R.color.purple));
        personImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.purple)));
        personText.setTextColor(ContextCompat.getColor(this, R.color.purple));
    }

    /**
     * 根据类型初始化并显示指定的Fragment
     * @param type 0：显示homeFragment 1：显示personalFragment
     */
    private void initFragment(int type) {
        // 获取FragmentManager和FragmentTransaction对象
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        hideFragment(transaction);  // 隐藏所有已存在的Fragment
        // 根据传入的 index 值，创建并添加新的 Fragment 或显示已存在的 Fragment
        switch (type) {
            case 0: // 0：显示 首页Fragment
                if (homeFragment == null) {
                    // 如果为 null，则创建一个新实例并添加到事务中
                    homeFragment = new MainActivityHome();
                    transaction.add(R.id.home_fragment_layout, homeFragment);
                } else {
                    // 如果不为 null，则显示该Fragment
                    transaction.show(homeFragment);
                }
                break;
            case 1: // 1：显示 个人 Fragment
                if (personalFragment == null) {
                    // 如果为 null，则创建一个新实例并添加到事务中
                    personalFragment = new MainActivityPersonal();
                    transaction.add(R.id.home_fragment_layout, personalFragment);
                } else {
                    // 如果不为 null，则显示该Fragment
                    transaction.show(personalFragment);
                }
                break;
            default:
                break;
        }
        // 提交事务
        transaction.commit();
    }

    // 用于隐藏两个Fragment
    private void hideFragment(android.app.FragmentTransaction transaction) {
        if (homeFragment != null) {
            transaction.hide(homeFragment);
        }
        if (personalFragment != null) {
            transaction.hide(personalFragment);
        }
    }

    // 系统自带返回键点击事件
    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // 判断用户是否按下了返回键，并且是第一次按下返回键（非重复按键）
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            exit();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    // 用于处理用户在应用中双击返回键退出程序的逻辑
    public void exit() {
        // 判断两次点击返回键的时间间隔是否超过2秒。
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            // 记录第一次点击返回键的时间戳
            exitTime = System.currentTimeMillis();
        } else {
            // 间隔小于2秒完成退出应用
            finish();
            System.exit(0);
        }
    }

    // 用来处理返回的结果
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 检查返回的Intent是否为空
        if (data != null) {
            String str = data.getStringExtra("return");
            // 如果返回值为"insert"，提示 "新增完成" ，设置联系人按钮的图标和文本的颜色为蓝色
            if (Objects.equals(str, "insert")) { // 检查请求与响应的页面的发源地是否匹配
                Toast.makeText(this, "新增完成", Toast.LENGTH_SHORT).show();
                contactsImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.cornflowerblue)));
                contactsText.setTextColor(ContextCompat.getColor(this, R.color.cornflowerblue));
                initFragment(0);    // 显示首页Fragment
            }else if (Objects.equals(str, "update")) {
                // 如果返回值为"update"，提示 "修改完成" ，设置个人按钮的图标和文本的颜色为蓝色
                Toast.makeText(this, "修改完成", Toast.LENGTH_SHORT).show();
                personImage.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.cornflowerblue)));
                personText.setTextColor(ContextCompat.getColor(this, R.color.cornflowerblue));
                initFragment(1);    // 显示个人Fragment
            }
        }
    }
}